package com.abk.ets.service;

import javax.ejb.EJB;
import javax.faces.bean.SessionScoped;
import javax.persistence.criteria.CriteriaBuilder.In;

import org.springframework.stereotype.Service;

import com.abk.ets.Exception.CheckDataException;
import com.abk.ets.Exception.DataLenghtException;
import com.abk.ets.dao.AdministrateurHome;
import com.abk.ets.dao.InvestisseurHome;
import com.abk.ets.dao.MembreHome;
import com.abk.ets.dao.SocieteHome;
import com.abk.ets.data.Administrateur;
import com.abk.ets.data.Investisseur;
import com.abk.ets.data.Membre;
import com.abk.ets.data.Personne;
import com.abk.ets.data.Societe;

@Service
@SessionScoped
public class GestionnaireUtilisateurs {

	private String nom;
	private String prenom;
	private String email;
	private String passwd;
	private String identifiant;
	private String nomSociete;
	
	@EJB
	AdministrateurHome adminDao;
	@EJB
	MembreHome membreDao;
	@EJB
	InvestisseurHome investDao;
	@EJB
	SocieteHome societeDao;
	
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public String getPrenom() {
		return prenom;
	}

	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPasswd() {
		return passwd;
	}

	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	public String getIdentifiant() {
		return identifiant;
	}

	public void setIdentifiant(String identifiant) {
		this.identifiant = identifiant;
	}
	
	
	public String getNomSociete() {
		return nomSociete;
	}

	public void setNomSociete(String nomSociete) {
		this.nomSociete = nomSociete;
	}

	public Personne creerPersonne(String nom, String prenom, String email, String passwd, String identifiant) throws DataLenghtException, CheckDataException{
		checkdata(email,passwd,identifiant);
		return new Personne(nom, prenom, email, passwd,identifiant);
	}

	private boolean checkdata(String email, String passwd, String identifiant) throws DataLenghtException, CheckDataException {
		boolean check;
		if(email==null || passwd==null || identifiant== null){
			throw new CheckDataException("l'un des parametres suivants est vide : email, mot de passe ou identifiant ");	
		}else
			if(identifiant.length()<=3 && identifiant.length()>10 ){
				throw new DataLenghtException("identifiant",4,10);
			}
		return true;
	}
	
	public void enregistrerAdmin() throws DataLenghtException, CheckDataException{
		Administrateur admin = new Administrateur(creerPersonne(nom, prenom, email, passwd, identifiant));
		adminDao.persist(admin);
	}
	
	public void enregistrerMembre(){
		
		Membre mbre;
		try {
			mbre = new Membre(societeDao.findByName(nomSociete),creerPersonne(nom, prenom, email, passwd, identifiant));
			membreDao.persist(mbre);
		} catch (DataLenghtException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (CheckDataException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public void enregistrerInvest(){
		Personne pers;
		try {
			pers = creerPersonne(nom, prenom, email, passwd, identifiant);
			Investisseur invest = new Investisseur(pers, 0);
			investDao.persist(invest);
		} catch (DataLenghtException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (CheckDataException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public void activerInvestisseur() {
		Investisseur investisseur = new Investisseur();
		investisseur.setEtat(1);
		investDao.merge(investisseur);
	}

	public void supprimerMembre() {
		Investisseur investisseur = new Investisseur();
		investDao.remove(investisseur);
	}
	
	public void supprimerInvest() {
		Membre membre = new Membre();
		membreDao.remove(membre);
	}
	
}
